package com.yunhe.authority.service.base;

import com.yunhe.authority.domain.base.FirmType;
import com.yunhe.common.exception.ArgumentErrorException;
import com.yunhe.common.exception.ObjectNotFoundException;
import com.yunhe.common.exception.UniqueConstraintsException;
import org.springframework.transaction.annotation.Transactional;

/**
 * 单位类型Service
 * @desc 单位类型服务类定义
 * @author liuronglei
 */
public interface FirmTypeService {

    /**
     * 新增单位类型
     * @param firmType 单位类型对象
     */
    @Transactional
    FirmType createFirmType(FirmType firmType)
            throws ArgumentErrorException, UniqueConstraintsException;

    /**
     * 删除单位类型
     * @param firmTypeId 单位类型ID
     */
    @Transactional
    void deleteFirmType(Long firmTypeId);

    /**
     * 更新单位类型（更新全部字段）
     * @param firmType 单位类型对象
     */
    @Transactional
    FirmType updateFirmType(FirmType firmType)
            throws ArgumentErrorException, UniqueConstraintsException, ObjectNotFoundException;

    /**
     * 更新单位类型（更新指定字段）
     * @param firmTypeId 单位类型ID
     * @param code 代码
     * @param name 编号
     * @param title 标题
     * @param sn 排序序号
     * @param activity 是否可用
     */
    @Transactional
    FirmType updateFirmType(Long firmTypeId,
                            Long code,
                            String name,
                            String title,
                            String sn,
                            Boolean activity)
            throws ArgumentErrorException, ObjectNotFoundException, UniqueConstraintsException;

    /**
     * 根据ID获得单位类型对象
     * @param id 状态ID
     */
    FirmType findByFirmTypeId(Long id);

    /**
     * 根据代码获得单位类型对象
     * @param code 代码
     */
    FirmType findByCode(Long code);

    /**
     * 根据编号获得单位类型对象
     * @param name 编号
     */
    FirmType findByName(String name);

    /**
     * 获得全部单位类型对象
     */
    Iterable<FirmType> findFirmTypes();
}
